home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / values.h < prev    next >
C/C++ Source or Header  |  1992-12-03  |  4KB  |  99 lines

  1.  
  2. #ifndef VALUES_H
  3. #define VALUES_H
  4.  
  5. /* These values work with any binary representation of integers
  6.  * where the high-order bit contains the sign. */
  7.  
  8. /* a number used normally for size of a shift */
  9. #define BITSPERBYTE    8
  10. #define BITS(type)    (BITSPERBYTE * (int)sizeof(type))
  11.  
  12. /* short, regular and long ints with only the high-order bit turned on */
  13. #define HIBITS    ((short)(1 << BITS(short) - 1))
  14. #define HIBITI    (1 << BITS(int) - 1)
  15. #define HIBITL    (1L << BITS(long) - 1)
  16.  
  17. /* largest short, regular and long int */
  18. #define MAXSHORT    ((short)~HIBITS)
  19. #define MAXINT    (~HIBITI)
  20. #define MAXLONG    (~HIBITL)
  21.  
  22. /* various values that describe the binary floating-point representation
  23.  * _EXPBASE    - the exponent base
  24.  * DMAXEXP     - the maximum exponent of a double (as returned by frexp())
  25.  * FMAXEXP     - the maximum exponent of a float  (as returned by frexp())
  26.  * DMINEXP     - the minimum exponent of a double (as returned by frexp())
  27.  * FMINEXP     - the minimum exponent of a float  (as returned by frexp())
  28.  * MAXDOUBLE    - the largest double
  29.             ((_EXPBASE ** DMAXEXP) * (1 - (_EXPBASE ** -DSIGNIF)))
  30.  * MAXFLOAT    - the largest float
  31.             ((_EXPBASE ** FMAXEXP) * (1 - (_EXPBASE ** -FSIGNIF)))
  32.  * MINDOUBLE    - the smallest double (_EXPBASE ** (DMINEXP - 1))
  33.  * MINFLOAT    - the smallest float (_EXPBASE ** (FMINEXP - 1))
  34.  * DSIGNIF    - the number of significant bits in a double
  35.  * FSIGNIF    - the number of significant bits in a float
  36.  * DMAXPOWTWO    - the largest power of two exactly representable as a double
  37.  * FMAXPOWTWO    - the largest power of two exactly representable as a float
  38.  * _IEEE    - 1 if IEEE standard representation is used
  39.  * _DEXPLEN    - the number of bits for the exponent of a double
  40.  * _FEXPLEN    - the number of bits for the exponent of a float
  41.  * _HIDDENBIT    - 1 if high-significance bit of mantissa is implicit
  42.  * LN_MAXDOUBLE    - the natural log of the largest double  -- log(MAXDOUBLE)
  43.  * LN_MINDOUBLE    - the natural log of the smallest double -- log(MINDOUBLE)
  44.  * LN_MAXFLOAT    - the natural log of the largest float  
  45.  * LN_MINFLOAT    - the natural log of the smallest float
  46.  */
  47. #if sun
  48. #define MAXDOUBLE       1.79769313486231470e+308
  49. #define MAXFLOAT    ((float)3.40282346638528860e+38)
  50. #define MINDOUBLE    4.94065645841246544e-324
  51. #define MINFLOAT    ((float)1.40129846432481707e-45)
  52. #define    _IEEE        1
  53. #define _DEXPLEN    11
  54. #define _HIDDENBIT    1
  55. #define DMINEXP    (-(DMAXEXP + DSIGNIF - _HIDDENBIT - 3))
  56. #define FMINEXP    (-(FMAXEXP + FSIGNIF - _HIDDENBIT - 3))
  57. #define LN_MAXFLOAT    8.8722839052068e+01
  58. #define LN_MINFLOAT    -1.03278929903432e+02
  59. #endif
  60.  
  61. #if mips
  62. #define MAXDOUBLE       1.79769313486231470e+308
  63. #define MAXFLOAT        ((float)3.40282346638528860e+38)
  64. #define MINDOUBLE       4.94065645841246544e-324
  65. #define MINFLOAT        ((float)1.40129846432481707e-45)
  66. #define _IEEE           1
  67. #define _DEXPLEN        11
  68. #define _HIDDENBIT      1
  69. #define DMINEXP (-(DMAXEXP + DSIGNIF - _HIDDENBIT - 3))
  70. #define FMINEXP (-(FMAXEXP + FSIGNIF - _HIDDENBIT - 3))
  71. #define LN_MAXFLOAT     (M_LN2 * FMAXEXP)
  72. #define LN_MINFLOAT     (M_LN2 * (FMINEXP - 1))
  73. #endif
  74.  
  75. #define _EXPBASE    (1 << _LENBASE)
  76. #define _FEXPLEN    8
  77. #define DSIGNIF    (BITS(double) - _DEXPLEN + _HIDDENBIT - 1)
  78. #define FSIGNIF    (BITS(float)  - _FEXPLEN + _HIDDENBIT - 1)
  79. #define DMAXPOWTWO    ((double)(1L << BITS(long) - 2) * \
  80.                 (1L << DSIGNIF - BITS(long) + 1))
  81. #define FMAXPOWTWO    ((float)(1L << FSIGNIF - 1))
  82. #define DMAXEXP    ((1 << _DEXPLEN - 1) - 1 + _IEEE)
  83. #define FMAXEXP    ((1 << _FEXPLEN - 1) - 1 + _IEEE)
  84. #define LN_MAXDOUBLE    (M_LN2 * DMAXEXP)
  85. #define LN_MINDOUBLE    (M_LN2 * (DMINEXP - 1))
  86.  
  87. #define H_PREC    (DSIGNIF % 2 ? (1L << DSIGNIF/2) * M_SQRT2 : 1L << DSIGNIF/2)
  88. #define X_EPS    (1.0/H_PREC)
  89. #define X_PLOSS    ((double)(long)(M_PI * H_PREC))
  90. #define X_TLOSS    (M_PI * DMAXPOWTWO)
  91. #define M_LN2    0.69314718055994530942
  92. #define M_PI    3.14159265358979323846
  93. #define M_SQRT2    1.41421356237309504880
  94. #define MAXBEXP    DMAXEXP /* for backward compatibility */
  95. #define MINBEXP    DMINEXP /* for backward compatibility */
  96. #define MAXPOWTWO    DMAXPOWTWO /* for backward compatibility */
  97.  
  98. #endif /* VALUES_H */
  99.